package com.example.myletcodelearing.one

import java.lang.StringBuilder
import java.util.*
import kotlin.collections.HashMap
import kotlin.math.abs


/**
 * @author tgw
 * @date 2022/11/7
 * https://leetcode.cn/problems/JFETK5/comments/
 *
给定两个 01 字符串 a 和 b ，请计算它们的和，并以二进制字符串的形式输出。

输入为 非空 字符串且只包含数字 1 和 0。

 

示例 1:

输入: a = "11", b = "10"
输出: "101"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"
 

提示：

每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ，就都不含前导零。

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/JFETK5
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

fun main(args: Array<String>) {
    var op = Solution19.Solution()
    var nums1 = "1"
    var nums2 = "111"
    var result = op.addBinary(nums1, nums2)

    print("打印：$result")

}

private class Solution19 {
    internal class Solution {
        fun addBinary(a: String, b: String): String {

            var aList = a.toMutableList()
            var bList = b.toMutableList()
            var sb = StringBuilder()
            if (aList.size > bList.size) {
                for (i in 0 until  (aList.size - bList.size)) {
                    bList.add(0, '0')
                }
            } else if (aList.size < bList.size) {
                for (i in 0 until (bList.size - aList.size)) {
                    aList.add(0, '0')
                }
            }
            aList.forEachIndexed { index, value ->
                if (aList[index] == '1' && bList[index] == '1') {
                    sb.append("10")
                } else if (aList[index] != '0' || bList[index] != '0') {
                    sb.append("1")
                }
            }
            return if (sb.toString().isNotEmpty()) {
                sb.toString()
            } else {
                "0"
            }
        }
    }

}
